/**
 * 地图图层样式配置对照表
 * 根据 pkid 匹配对应的图层样式配置
 */

// 图层样式配置对照表
export const layerStyleConfig = {
  // 城市体检板块样式
  '1z': { //问题住房
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#fc17a8',
      'fill-opacity': 0.4,
      'fill-outline-color': '#f8304b'
    }
    }
  },
  '2': { //小区
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#00e1ff',
      'fill-opacity': 0.4,
      'fill-outline-color': '#003366'
    }
    }
  },
  '300': { //社区基本信息
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#ffc268',
      'fill-opacity': 0.4,
      'fill-outline-color': '#003366'
    }
    }
  },
  '310': { //街道办事处
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#1d3fff',
      'fill-opacity': 0.4,
      'fill-outline-color': '#2f3cac'
    }
    }
  },
  '311': { //社区服务站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#ff3f9f',
      'fill-opacity': 0.4,
      'fill-outline-color': '#ad1d8e'
    }
    }
  },
  '322': { //幼儿园
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#ffa928',
      'fill-opacity': 0.4,
      'fill-outline-color': '#cc8c15'
    }
    }
  },
  '323': { //托育机构
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#fce092',
      'fill-opacity': 0.4,
      'fill-outline-color': '#a07017'
    }
    }
  },
  '330': { //街道卫生中心
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#01ddfa',
      'fill-opacity': 0.4,
      'fill-outline-color': '#176f97'
    }
    }
  },
  '331': { //社区卫生服务站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#79c0d6',
      'fill-opacity': 0.4,
      'fill-outline-color': '#1a73c5'
    }
    }
  },
  '341': { //街道养老中心
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#ce8312',
      'fill-opacity': 0.4,
      'fill-outline-color': '#7c550b'
    }
    }
  },
  '342': { //社区养老服务站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#f0850b',
      'fill-opacity': 0.4,
      'fill-outline-color': '#9e642e'
    }
    }
  },
  '343': { //老年大学
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#b9bb4a',
      'fill-opacity': 0.4,
      'fill-outline-color': '#888630'
    }
    }
  },
  '350': { //街道文化中心
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#ff68bb',
      'fill-opacity': 0.4,
      'fill-outline-color': '#962687'
    }
    }
  },
  '351': { //社区文化活动站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#bd6fbd',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8a4784'
    }
    }
  },
  '360': { //街道就业中心
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#9068ff',
      'fill-opacity': 0.4,
      'fill-outline-color': '#6a3085'
    }
    }
  },
  '361': { //社区就业服务站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#9069b4',
      'fill-opacity': 0.4,
      'fill-outline-color': '#691988'
    }
    }
  },
  '370': { //公共活动空间及体育活动场地
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#20ca61',
      'fill-opacity': 0.4,
      'fill-outline-color': '#2d8844'
    }
    }
  },
  '371': { //足球场馆
    type: 'circle',
    layerType: 'circle',
    style: {
    paint: {
      'circle-color': '#30924e',
      'circle-opacity': 0.4,
      'circle-radius': 20,
      'circle-stroke-color': '#0f5320',
      'circle-stroke-opacity': 0.4,
      'circle-stroke-width': 1
    }
    }
  },
  '380': { //社区食堂
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#fa4d19',
      'fill-opacity': 0.4,
      'fill-outline-color': '#912613'
    }
    }
  },
  '391': { //易涝点
    type: 'circle',
    layerType: 'circle',
    style: {
    paint: {
      'circle-color': '#3a3a3a',
      'circle-opacity': 0.4,
      'circle-radius': 20,
      'circle-stroke-color': '#1f1f1f',
      'circle-stroke-opacity': 0.4,
      'circle-stroke-width': 1
    }
    }
  },
  '392': { //消防站
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#1061ac',
      'fill-opacity': 0.4,
      'fill-outline-color': '#0b2468'
    }
    }
  },
  '510': { //闲置建筑
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#2dd192',
      'fill-opacity': 0.4,
      'fill-outline-color': '#15833f'
    }
    }
  },
  '511': { //边角用地
    type: 'fill',
    layerType: 'polygon',
    style: {
    paint: {
      'fill-color': '#b5eb23',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8ead04'
    }
    }
  },
  // 存量资源板块样式
  '410': {
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff4d16',
      'fill-opacity': 0.4,
      'fill-outline-color': '#9e1404'
     }
    }
   },
   '411': {  // 传统风貌区
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ffa908',
      'fill-opacity': 0.4,
      'fill-outline-color': '#9c6604'
     }
    }
   },
   '412': {  // 历史名镇名村
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#4ed449',
      'fill-opacity': 0.4,
      'fill-outline-color': '#0c712e'
     }
    }
   },
   '413': {  // 历史建筑
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#fd50fd',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8f1984'
     }
    }
   },
   '414': {  // 工业遗产
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#af5b2b',
      'fill-opacity': 0.4,
      'fill-outline-color': '#2b9999'
     }
    }
   },
   '415': {  // 不可移动文物
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#4bdddd',
      'fill-opacity': 0.4,
      'fill-outline-color': '#2a6f9c'
     }
    }
   },
   '420': {  // 工业仓储园区
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#927c54',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8d6229'
     }
    }
   },
   '421': {  // 规上工业企业
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#c49d55',
      'fill-opacity': 0.4,
      'fill-outline-color': '#9b6d31'
     }
    }
   },
  //  '430': {  // 沿街商业
  //   type: 'fill',
  //   layerType: 'polygon',
  //   style: {
  //    paint: {
  //     'fill-color': '#ff3333',
  //     'fill-opacity': 0.4,
  //     'fill-outline-color': '#9b3d31'
  //    }
  //   }
  //  },
   '431': {  // 沿街商业
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff3333',
      'fill-opacity': 0.4,
       'fill-outline-color': '#9b3d31'
     }
    }
   },
   '401': {  // 文创街区
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ffc353',
      'fill-opacity': 0.4,
      'fill-outline-color': '#b97318'
     }
    }
   },
   '402': {  // 商业街区
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff3281',
      'fill-opacity': 0.4,
      'fill-outline-color': '#bb225d'
     }
    }
   },
   '403': {  // 购物中心
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff5100',
      'fill-opacity': 0.4,
      'fill-outline-color': '#ca2f00'
     }
    }
   },
   '430': {  // 商贸市场
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#9b0e0e',
      'fill-opacity': 0.4,
      'fill-outline-color': '#5e1003'
     }
    }
   },
   '440': {  // 重要景观道路
    type: 'line',
    layerType: 'line',
    style: {
     paint: {
      'line-color': '#2e8115',
      'line-opacity': 0.4,
      'line-width': 3
     }
    }
   },
   '443': {  // 山城步道
    type: 'line',
    layerType: 'line',
    style: {
     paint: {
      'line-color': '#1b8f89',
      'line-opacity': 0.4,
      'line-width': 2
     }
    }
   },
   '460': {  // 交通枢纽
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#525252',
      'fill-opacity': 0.4,
      'fill-outline-color': '#747474'
     }
    }
   },
   '501': {  // 综合提升的道路
    type: 'line',
    layerType: 'line',
    style: {
     paint: {
      'line-color': '#1854d4',
      'line-opacity': 0.4,
      'line-width': 3
     }
    }
   },
   '502': {  // 轨道站点
    type: 'circle',
    layerType: 'circle',
    style: {
     paint: {
      'circle-color': '#0096ec',
      'circle-opacity': 0.4,
      'circle-radius': 20,
      'circle-stroke-color': '#0075e2',
      'circle-stroke-opacity': 0.4,
      'circle-stroke-width': 1
     }
    }
   },
   '450': {  // 闲置用地
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#8ee0cf',
      'fill-opacity': 0.4,
      'fill-outline-color': '#336960'
     }
    }
   },
   '60': {  // 图书馆
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ffa621',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b590e'
     }
    }
   },
   '61': {  // 文化馆
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff674c',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b2b0e'
     }
    }
   },
   '62': {  // 美术馆
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#fffc4c',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b7e0e'
     }
    }
   },
   '63': {  // 博物馆
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff4cc9',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b0e85'
     }
    }
   },
   '64': {  // 科技馆
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#2a6dff',
      'fill-opacity': 0.4,
      'fill-outline-color': '#0e2b8b'
     }
    }
   },
   '320': {  // 初中
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#4cd5ff',
      'fill-opacity': 0.4,
      'fill-outline-color': '#0e488b'
     }
    }
   },
   '321': {  // 小学
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff4cc3',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b0e81'
     }
    }
   },
   '340': {  // 养老院
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#fffc4c',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b7e0e'
     }
    }
   },
   '390': {  // 应急避难场所
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ca16ee',
      'fill-opacity': 0.4,
      'fill-outline-color': '#6d0d6d'
     }
    }
   },
   '3a1': {  // 公园绿地广场
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#1fbd46',
      'fill-opacity': 0.4,
      'fill-outline-color': '#0e8b51'
     }
    }
   },
   '10': {  // cd级危房
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff0000',
      'fill-opacity': 0.4,
      'fill-outline-color': '#8b0e0e'
     }
    }
   },
   '70': {  // 公租房
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#ff64a5',
      'fill-opacity': 0.4,
      'fill-outline-color': '#973081'
     }
    }
   },
   '71': {  // 保租房
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#faaa42',
      'fill-opacity': 0.4,
      'fill-outline-color': '#a05a19'
     }
    }
   },
   '72': {  // 城中村
    type: 'fill',
    layerType: 'polygon',
    style: {
     paint: {
      'fill-color': '#7dfc5e',
      'fill-opacity': 0.4,
      'fill-outline-color': '#2c741e'
     }
    }
   },
  

  // // 楼栋高亮图层样例
  // '60': {
  //   type: 'fill',
  //   layerType: 'building',
  //   name: '楼栋高亮1',
  //   style: {
  //     paint: {
  //       'fill-color': 'red',
  //       'fill-opacity': 0.6,
  //       'fill-outline-color': '#CC0000'
  //     }
  //   },
  //   // 楼栋特有配置
  //   buildingConfig: {
  //     highlightColor: 'red',
  //     selectedColor: 'red',
  //     opacity: 0.6
  //   }
  // },
  // 'building-highlight-002': {
  //   type: 'fill',
  //   layerType: 'building',
  //   name: '楼栋高亮2',
  //   style: {
  //     paint: {
  //       'fill-color': '#00FF00',
  //       'fill-opacity': 0.5,
  //       'fill-outline-color': '#00CC00'
  //     }
  //   },
  //   buildingConfig: {
  //     highlightColor: '#00FF00',
  //     selectedColor: '#0066FF',
  //     opacity: 0.5
  //   }
  // },

  // // Symbol 图层样例（图标点）
  // 'symbol-layer-001': {
  //   type: 'symbol',
  //   layerType: 'symbol',
  //   name: '图标点图层1',
  //   style: {
  //     layout: {
  //       'icon-image': 'custom-marker',
  //       'icon-size': 1.2,
  //       'icon-allow-overlap': true,
  //       'text-field': ['get', 'name'],
  //       'text-font': ['Open Sans Regular'],
  //       'text-offset': [0, 1.25],
  //       'text-size': 12
  //     },
  //     paint: {
  //       'text-color': '#333333',
  //       'text-halo-color': '#FFFFFF',
  //       'text-halo-width': 1
  //     }
  //   }
  // }
}

/**
 * 根据 pkid 获取图层样式配置
 * @param {string} pkid - 图层的唯一标识符
 * @returns {object|null} 样式配置对象，如果未找到返回 null
 */
export const getLayerStyleByPkid = (pkid) => {
  return layerStyleConfig[pkid] || null
}

/**
 * 根据图层类型获取默认样式
 * @param {string} layerType - 图层类型：point, line, polygon, building, symbol
 * @returns {object} 默认样式配置对象
 */
export const getDefaultStyleByType = (layerType) => {
  const defaultStyles = {
    point: {
      type: 'circle',
      style: {
        paint: {
          'circle-color': '#666666',
          'circle-radius': 6,
          'circle-opacity': 0.8,
          'circle-stroke-width': 1,
          'circle-stroke-color': '#FFFFFF'
        }
      }
    },
    line: {
      type: 'line',
      style: {
        paint: {
          'line-color': '#666666',
          'line-width': 2,
          'line-opacity': 0.8
        }
      }
    },
    polygon: {
      type: 'fill',
      style: {
        paint: {
          'fill-color': '#666666',
          'fill-opacity': 0.3,
          'fill-outline-color': '#333333'
        }
      }
    },
    building: {
      type: 'fill',
      style: {
        paint: {
          'fill-color': '#0066FF',
          'fill-opacity': 0.5,
          'fill-outline-color': '#003399'
        }
      }
    },
    symbol: {
      type: 'symbol',
      style: {
        layout: {
          'icon-size': 1,
          'icon-allow-overlap': true
        }
      }
    }
  }
  
  return defaultStyles[layerType] || defaultStyles.polygon
}

/**
 * 应用样式到地图图层
 * @param {object} map - Mapbox 地图实例
 * @param {string} layerId - 图层 ID
 * @param {string} pkid - 配置 ID
 */
export const applyLayerStyle = (map, layerId, pkid) => {
  const styleConfig = getLayerStyleByPkid(pkid)
  if (!styleConfig || !map.getLayer(layerId)) {
    return
  }

  const { style } = styleConfig
  
  // 应用 paint 样式
  if (style.paint) {
    Object.keys(style.paint).forEach(property => {
      try {
        map.setPaintProperty(layerId, property, style.paint[property])
      } catch (e) {
        console.warn(`Failed to set paint property ${property} for layer ${layerId}:`, e)
      }
    })
  }

  // 应用 layout 样式
  if (style.layout) {
    Object.keys(style.layout).forEach(property => {
      try {
        map.setLayoutProperty(layerId, property, style.layout[property])
      } catch (e) {
        console.warn(`Failed to set layout property ${property} for layer ${layerId}:`, e)
      }
    })
  }
}

/**
 * 获取所有可用的样式配置列表
 * @returns {Array} 样式配置列表
 */
export const getAllStyleConfigs = () => {
  return Object.keys(layerStyleConfig).map(pkid => ({
    pkid,
    ...layerStyleConfig[pkid]
  }))
}

/**
 * 根据图层类型筛选样式配置
 * @param {string} layerType - 图层类型
 * @returns {Array} 筛选后的样式配置列表
 */
export const getStyleConfigsByType = (layerType) => {
  return Object.keys(layerStyleConfig)
    .filter(pkid => layerStyleConfig[pkid].layerType === layerType)
    .map(pkid => ({
      pkid,
      ...layerStyleConfig[pkid]
    }))
}
